<?php
//PingBuWang.Com
//Copyright (c) 2017~2099 http://www.pingbuwang.com All rights reserved.
namespace app\article\controller;
use think\Request;
use mip\Htmlp;
use mip\AdminApiBase;
class ApiAdminArticle extends AdminApiBase
{
    protected $beforeActionList = ['start'];
    public function start() {

    }

    public function do_add()
    {
        $title = input('post.title');
        $status = input('post.status');
        $content = input('post.content');
        $description = model('app\article\model\Article')->getDescriptionByContent($content);
        $cid = input('post.cid');

        $publish_time = date('Y-m-d H:i:s',time());

        if (!$title) {
            return jsonError('请输入标题');
        }

        // 获取分类对象
        $cate =  model('app\article\model\ArticleCategory')->getById($cid);
        if (!$cid||!$cate) {
            return jsonError('请选择分类,该分类对象没找到');
        }
        if (!$content) {
            return jsonError('请输入内容');
        }

        $itemInfo = db('articles')->where('title',$title)->find();
        if ($itemInfo) {
            return jsonError('标题已存在');
        }

        // 获取最大的顺序号
        $maxSort = ( db('articles')->where('cid',$cid)->max('sort') ) + 1;

        // 处理文章内容中的图片，如果不是本服务器的图片，则保存到本服务器上
        $imgCount = preg_match_all('#<img.+?src="(.+?)"#i',$content,$imgArr );
        $imgArr = $imgArr[1];

        // 日期路径
        $datePath =  DS . date('Y', time()) . DS . date('m', time()) . DS . date('d', time());
        // 文件存储相对路径
        $relaPath =  DS . 'uploads' . DS . 'article' .$datePath;
        $imgUrl1 = null;
        foreach($imgArr as $k=>$img){

            if(strpos($img,$this->mipInfo['domain'])===0 || strpos($img,'/')===0 ){
                $imgUrl = $img;
            }else {
                $res1 = getImage($img, PUBLIC_PATH . $relaPath);
                $imgUrl = $relaPath . DS . $res1['file_name'];
                $content = str_replace($img,$imgUrl,$content);
            }
            if($imgUrl1 == null){
                $imgUrl1=$imgUrl;
            }
        }

        $resArray = array (
            'title' => htmlspecialchars($title),
            'description' => $description,
            'uid' => session('userInfo')['uid'],
            'fullcid'=>$cate['fullid'],
            'cid' => $cid,
            'img_url' =>$imgUrl1,
            'status' => $status,
            'publish_time' => $publish_time,
            'create_time' => date('Y-m-d H:i:s',time()),
            'edit_time' => date('Y-m-d H:i:s',time()),
            'sort'  => $maxSort
        );

        $id= model('app\article\model\Article')->doAddGetId($resArray);

        // 保存文章成功后，将内容保存到文章内容表，将标签保存到文章标签表，执行PUSH操作
        if ($id) {
            model('app\article\model\Article')->doAddContent($id,$content);
        }

        model('app\article\model\Article')->updateTagsByArticle($id,$content);

        return jsonSuccess('发布成功');

    }


    public function do_edit()
    {
        $id = input('post.id');
        $title = input('post.title');
        $status = input('post.status');
        $content = input('post.content');
        $description = model('app\article\model\Article')->getDescriptionByContent($content);
        $cid = input('post.cid');
 

        $publish_time = date('Y-m-d H:i:s',time());

        if (!$title) {
            return jsonError('请输入标题');
        }

        // 获取分类对象
        $cate = model('app\article\model\ArticleCategory')->getById( $cid );
        if (!$cid||!$cate) {
            return jsonError('请选择分类,该分类对象没找到');
        }

        if (!$title) {
            return jsonError('请输入标题');
        }
        if (!$content) {
            return jsonError('请输入内容');
        }

        $itemInfo = model('app\article\model\Article')->getById($id);
        if (!$itemInfo) {
            return jsonError('不存在');
        }

        // 处理文章内容中的图片，如果不是本服务器的图片，则保存到本服务器上
        $imgCount = preg_match_all('#<img.+?src="(.+?)"#i',$content,$imgArr );
        $imgArr = $imgArr[1];

        // 日期路径
        $datePath =  DS . date('Y', time()) . DS . date('m', time()) . DS . date('d', time());
        // 文件存储相对路径
        $relaPath =  DS . 'uploads' . DS . 'article' .$datePath;
        $imgUrl1 = null;
        foreach($imgArr as $k=>$img){


            if(strpos($img,$this->mipInfo['domain'])===0 || strpos($img,'/')===0 ){
                $imgUrl = $img;
            }else {
                $res1 = getImage($img, PUBLIC_PATH . $relaPath);
                $imgUrl = $relaPath . DS . $res1['file_name'];
                $content = str_replace($img,$imgUrl,$content);
            }
            if($imgUrl1 == null){
                $imgUrl1=$imgUrl;
            }
        }

        $resArray = array(
            'title' => htmlspecialchars($title),
            'description' => $description,
            'fullcid'=>$cate['fullid'],
            'cid' => $cid,
            'status' =>$status,
            'img_url' => $imgUrl1,
            'publish_time' => $publish_time,
            'edit_time'=>date('Y-m-d H:i:s',time()),

        );

        // update article info
        $ucnt = model('app\article\model\Article')->doEdit($id,$resArray);

        // 处理文章内容
        $acnt = db('articlesContent')->where('id',$id)->count();
        if($acnt == 0){
            model('app\article\model\Article')->doAddContent($id,$content);
        }else{
            model('app\article\model\Article')->doEditContent($id,$content);
        }

        // 处理文章关联的 tag 关键字
        model('app\article\model\Article')->updateTagsByArticle($id,$content);

        return jsonSuccess('修改成功');
    }


    public function do_del()
    {
        $id = input('post.id');
        if (!$id) {
            return jsonError('缺少参数');
        }
        model('app\article\model\Article')->doDelByIds($id);
        return jsonSuccess('操作成功');

    }

    public function do_dels()
    {
        $ids = input('post.ids');
        if (!$ids) {
            return jsonError('缺少参数');
        }
        $ids = explode(',',$ids);
        model('app\article\model\Article')->doDelByIds($ids);

        return jsonSuccess('操作成功');

    }
    public function do_transfer_all()
    {
        $cid = input('post.cid');
        $ids = input('post.ids');
        if (!$ids) {
            return jsonError('缺少参数2');
        }
        if ($cid == '') {
            $cid = 0;
        }
        $ids = explode(',',$ids);
        if (is_array($ids)) {
            foreach ($ids as $id){
                model('app\article\model\Article')->doEdit($id, array('cid' => $cid));
            }
            return jsonSuccess('操作成功');
        } else {
            return  jsonError('参数错误');
        }
    }

    public function get_by_id()
    {
        $id = input('post.id');
        if (!$id) {
            return jsonSuccess('没有获得文章id');
        }
        $itemInfo = model('app\article\model\Article')->getById($id);
        if (!$itemInfo) {
            return jsonError('不存在 id = '.$id.' 的文章');
        }

        return jsonSuccess('',$itemInfo);
    }

    /**
     * 伪原创功能
     * @return \think\response\Json
     */
    public function ajax_reword()
    {
        $word = input('post.word');
        $lang = input('post.lang');
        if (!$word) {
            return jsonError('文章为空');
        }

        $info=['word'=>$word,'relang'=>$lang] ;
        $url='http://wordrobot.pingbuwang.com/convert';

        $context = stream_context_create(array(
            'http' => array('method' => 'POST','header' => 'Content-type:application/x-www-form-urlencoded','content' => http_build_query($info),'timeout' => 150 )
        ));

        $result = file_get_contents($url, false, $context);

        return jsonSuccess('reword result',$result);
    }

    private function link_urldecode($url) {
        $uri = '';
        $cs = unpack('C*', $url);
        $len = count($cs);
        for ($i=1; $i<=$len; $i++) {
            $uri .= $cs[$i] > 127 ? '%'.strtoupper(dechex($cs[$i])) : $url{$i-1};
        }
        return $uri;
    }
    public function get_list_has_child()
    {
        $page = input('post.page');
        $limit = input('post.limit');
        $order = input('post.order');
        $cid = input('post.cid');
        $searchWord = input('post.searchWord');

        if (!$page) {
            $page = 1;
        }
        if (!$limit) {
            $limit = 15;
        }

        if (!$order) {
            $order = 'cid asc,sort desc,publish_time desc ';
        }

        $where = null;
        if(!empty($cid)){
            // 先获取分类的fullid字段
            $arrFullid = db('articlesCategory')->where(array('id'=>$cid))->field('fullid')->find();
            if($arrFullid && isset($arrFullid['fullid']) ){
                $fullid = $arrFullid['fullid'];

                $where = array('fullcid'=> array('like', $fullid.'%')  ) ;
            }

        }

        $itemList = model('app\article\model\Article')->getPage($where,$order,$page,$limit,$searchWord);

        return jsonSuccess('', $itemList);
    }

    public function do_move_up(){
        $id= input('post.id');

        $res= model('app\article\model\Article')->moveSort($id,'up');
        if($res==1){
            return jsonSuccess('排序已经成功完成。');
        }else if($res==0){
            return jsonSuccess('位置已经是第一个了，无法向前移动');
        }else {
            return jsonError('由于未知原因，排序失败，异常值：'.$res);
        }

    }

    public function do_move_down(){
        $id= input('post.id');

        $res= model('app\article\model\Article')->moveSort($id,'down');
        if($res==1){
            return jsonSuccess('排序已经成功完成。');
        }else if($res==0){
            return jsonSuccess('位置已经是最后一个了，无法向后移动');
        }else {
            return jsonError('由于未知原因，排序失败，异常值：'.$res);
        }

    }

}